package com.yc.spring.mvc.web;

import com.yc.spring.mvc.entity.Result;
import com.yc.spring.mvc.entity.User;
import org.springframework.stereotype.Controller;
import org.springframework.validation.Errors;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;
import java.io.File;
import java.io.IOException;
import java.net.http.HttpRequest;

//Controller默认当前对象的所有方法返回的是视图
/* @RestController 是一个组合注解，
它结合了 @Controller 和 @ResponseBody 注解的功能
（就相当于把两个注解组合在一起）。在使用 @RestController 注解标记的类中，
每个方法的返回值都会以 JSON 或 XML 的形式
直接写入 HTTP 响应体中，相当于在每个方法上都添加了
 @ResponseBody 注解。
*/
//RestController默认。。。是json数据
@Controller
public class IndexController {
    @GetMapping("toTest")
    public String toTest(String name, HttpServletRequest request){
       request.setAttribute("myname", name);
       User user=new User();
       user.setName(name);
       request.getSession().setAttribute("myinfo", user);
       return "test.jsp";
    }
    /*
      @ResponseBody 注解表示方法的返回值应该
      直接写入 HTTP 响应体中，而不是被解析为视图。
      它告诉 Spring MVC 框架将方法的返回值序列化为特定格式
      （如 JSON、XML 等）并作为响应的主体内容返回给客户端。
    */
    @GetMapping("myinfo")
    @ResponseBody//返回json   SessionAttribute从session中找myinfo
    public User myinfo(@SessionAttribute User myinfo){
        return myinfo;
    }
    @RequestMapping("reg")
    @ResponseBody
    public Result reg(@Valid User user, Errors errors){
        if(errors.hasErrors()){
           return new Result(0,"验证错误",errors.getAllErrors());
        }else{
            int i=1/0;
            return new Result(1,"注册成功",null);
        }
    }
    @PostMapping("upload")
    @ResponseBody
    public Result uploadHead(@RequestParam("head")MultipartFile file,
                             User user) throws IOException {
        //获取上传的文件名
        String filename=file.getOriginalFilename();
        file.transferTo(new File("/Users/xiaoktongxue/Desktop/images/"+filename));
        return new Result(1,"文件上传成功",user);
    }
}
